3.

The Wage Tract — заповедник в округе Тома, Джорджия, США, деревья в котором не затронуты деятельностью человека со времён первых поселенцев. Для участка заповедника размером 200х200 м имеется информация о координатах сосен (sn — координата в направлении север-юг, we — в направлении запад-восток, обе от 0 до 200).

Проверим, можно ли пространственное распределение сосен считать равномерным, или они растут кластерами.

Загрузите данные, поделите участок на 5х5 одинаковых квадратов размера 40x40 м, посчитайте количество сосен в каждом квадрате (чтобы получить такой же результат, как у нас, используйте функцию scipy.stats.binned_statistic_2d).

Если сосны действительно растут равномерно, какое среднее ожидаемое количество сосен в каждом квадрате? В правильном ответе два знака после десятичной точки.

4.

Чтобы сравнить распределение сосен с равномерным, посчитайте значение статистики хи-квадрат для полученных 5х5 квадратов. Округлите ответ до двух знаков после десятичной точки.

5.

Насколько велико это значение? Если нулевая гипотеза справедлива, с какой вероятностью его можно было получить случайно?

Нулевое распределение статистики — хи-квадрат с 25−1=24 степенями свободы (поскольку у равномерного распределения, с которым мы сравниваем данные, нет ни одного оцениваемого по выборке параметра, число степеней свободы K−1, где K — количество интервалов).

Посчитайте достигаемый уровень значимости.

Если вы используете функцию scipy.stats.chi2.cdf, в качестве значения параметра df нужно взять 24 (это число степеней свободы); если функцию scipy.stats.chisquare — параметр ddof нужно брать равным 0 (это как раз количество параметров теоретического распределения, оцениваемых по выборке).

Отвергается ли гипотеза равномерности на уровне значимости 0.05?


In [1]:
import numpy as np
from scipy import stats

In [22]:
fin = open('pines.txt', 'r')
fin.readline()
xs = []
ys = []
for line in fin.readlines():
    coords = line.strip().split()
    xs.append(float(coords[0]))
    ys.append(float(coords[1]))
stat = stats.binned_statistic_2d(xs, ys, None, statistic='count', bins=5, expand_binnumbers=True)
#len(stat.binnumber)
s = stat.statistic

In [21]:
len(xs)/25.0


Out[21]:
23.36

In [23]:
s


Out[23]:
array([[ 18.,  26.,  29.,  25.,  20.],
       [ 14.,  12.,  22.,  34.,  25.],
       [ 12.,  24.,  15.,  50.,  37.],
       [  8.,  19.,  31.,  50.,   7.],
       [  7.,   8.,  37.,  27.,  27.]])

In [25]:
s.ravel().mean()


Out[25]:
23.359999999999999

In [26]:
stats.chisquare(s.ravel())


Out[26]:
Power_divergenceResult(statistic=150.58904109589042, pvalue=2.5746697749672785e-20)

In [29]:
stats.chisquare(s.ravel(), ddof=24)


Out[29]:
Power_divergenceResult(statistic=150.58904109589042, pvalue=nan)

In [ ]: